package com.sojson.util.pay.wx.bean;

import java.util.List;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.sojson.base.impl.BaseUtilDto;
import com.sojson.util.pay.wx.bean.child.param.WxPamAmount;
import com.sojson.util.pay.wx.bean.child.param.WxPamCombinePayerInfo;
import com.sojson.util.pay.wx.bean.child.param.WxPamDetail;
import com.sojson.util.pay.wx.bean.child.param.WxPamGoodsDetail;
import com.sojson.util.pay.wx.bean.child.param.WxPamPayer;
import com.sojson.util.pay.wx.bean.child.param.WxPamSceneInfo;
import com.sojson.util.pay.wx.bean.child.param.WxPamSettleInfo;
import com.sojson.util.pay.wx.bean.child.param.WxPamSubOrders;
import com.sojson.util.pay.wx.bean.child.param.WxPamTransferDetailList;

/**
 * 微信V3接口参数Bean
 * 
 * @author liu
 * @date 2020-09-03
 */
public class WxParamV3 extends BaseUtilDto {

    /***/
    private static final long serialVersionUID = 2231406852564862492L;

    /** 应用ID(请求统一下单接口时请注意APPID的应用属性,例如公众号场景下,需使用应用属性为公众号的APPID) */
    private String appid;
    /** 商户号 */
    private String mchid;
    /** 商品描述 */
    private String description;
    /** 商户订单号 */
    private String outTradeNo;
    /** 交易结束时间 */
    private String timeExpire;
    /** 附加数据 */
    private String attach;
    /** 通知地址 */
    private String notifyUrl;
    /** 订单优惠标记 */
    private String goodsTag;
    /** 订单金额 */
    private WxPamAmount amount;
    /** 支付者信息 */
    private WxPamPayer payer;
    /** 优惠信息 */
    private WxPamDetail detail;
    /** 支付场景信息 */
    private WxPamSceneInfo sceneInfo;
    /** 订单优惠标记 */
    private WxPamSettleInfo settleInfo;
    /** 微信支付订单号 */
    private String transactionId;
    /** 商户退款单号 */
    private String outRefundNo;
    /** 合单商户Appid */
    private String combineAppid;
    /** 合单商户号 */
    private String combineMchid;
    /** 合单商户订单号 */
    private String combineOutTradeNo;
    /** 子单信息 */
    private List<WxPamSubOrders> subOrders;
    /** 合单支付者 */
    private WxPamCombinePayerInfo combinePayerInfo;
    /** 商家批次单号 */
    private String outBatchNo;
    /** 批次名称 */
    private String batchName;
    /** 批次备注 */
    private String batchRemark;
    /** 转账总金额 */
    private Integer totalAmount;
    /** 转账总笔数 */
    private Integer totalNum;
    /** 退款原因 */
    private String reason;
    /** 退款资金来源 */
    private String fundsAccount;
    /** 退款商品(指定商品退款需要传此参数,其他场景无需传递) */
    private WxPamGoodsDetail goodsDetail;
    /** 转账明细列表 */
    private List<WxPamTransferDetailList> transferDetailList;

    /** 获取应用ID(请求统一下单接口时请注意APPID的应用属性,例如公众号场景下,需使用应用属性为公众号的APPID) */
    public String getAppid() {
        return appid;
    }

    /** 设置应用ID(请求统一下单接口时请注意APPID的应用属性,例如公众号场景下,需使用应用属性为公众号的APPID) */
    public void setAppid(String appid) {
        this.appid = appid;
    }

    /** 获取商户号 */
    public String getMchid() {
        return mchid;
    }

    /** 设置商户号 */
    public void setMchid(String mchid) {
        this.mchid = mchid;
    }

    /** 获取商品描述 */
    public String getDescription() {
        return description;
    }

    /** 设置商品描述 */
    public void setDescription(String description) {
        this.description = description;
    }

    /** 获取商户订单号 */
    @JsonProperty("out_trade_no")
    @JSONField(name = "out_trade_no")
    public String getOutTradeNo() {
        return outTradeNo;
    }

    /** 设置商户订单号 */
    public void setOutTradeNo(String outTradeNo) {
        this.outTradeNo = outTradeNo;
    }

    /** 获取交易结束时间 */
    @JsonProperty("time_expire")
    @JSONField(name = "time_expire")
    public String getTimeExpire() {
        return timeExpire;
    }

    /** 设置交易结束时间 */
    public void setTimeExpire(String timeExpire) {
        this.timeExpire = timeExpire;
    }

    /** 获取附加数据 */
    public String getAttach() {
        return attach;
    }

    /** 设置附加数据 */
    public void setAttach(String attach) {
        this.attach = attach;
    }

    /** 获取通知地址 */
    @JsonProperty("notify_url")
    @JSONField(name = "notify_url")
    public String getNotifyUrl() {
        return notifyUrl;
    }

    /** 设置通知地址 */
    public void setNotifyUrl(String notifyUrl) {
        this.notifyUrl = notifyUrl;
    }

    /** 获取订单优惠标记 */
    @JsonProperty("goods_tag")
    @JSONField(name = "goods_tag")
    public String getGoodsTag() {
        return goodsTag;
    }

    /** 设置订单优惠标记 */
    public void setGoodsTag(String goodsTag) {
        this.goodsTag = goodsTag;
    }

    /** 获取订单金额 */
    public WxPamAmount getAmount() {
        return amount;
    }

    /** 设置订单金额 */
    public void setAmount(WxPamAmount amount) {
        this.amount = amount;
    }

    /** 获取支付者信息 */
    public WxPamPayer getPayer() {
        return payer;
    }

    /** 设置支付者信息 */
    public void setPayer(WxPamPayer payer) {
        this.payer = payer;
    }

    /** 获取优惠信息 */
    public WxPamDetail getDetail() {
        return detail;
    }

    /** 设置优惠信息 */
    public void setDetail(WxPamDetail detail) {
        this.detail = detail;
    }

    /** 获取支付场景信息 */
    @JsonProperty("scene_info")
    @JSONField(name = "scene_info")
    public WxPamSceneInfo getSceneInfo() {
        return sceneInfo;
    }

    /** 设置支付场景信息 */
    public void setSceneInfo(WxPamSceneInfo sceneInfo) {
        this.sceneInfo = sceneInfo;
    }

    /** 获取订单优惠标记 */
    @JsonProperty("settle_info")
    @JSONField(name = "settle_info")
    public WxPamSettleInfo getSettleInfo() {
        return settleInfo;
    }

    /** 设置订单优惠标记 */
    public void setSettleInfo(WxPamSettleInfo settleInfo) {
        this.settleInfo = settleInfo;
    }

    /** 获取微信支付订单号 */
    @JsonProperty("transaction_id")
    @JSONField(name = "transaction_id")
    public String getTransactionId() {
        return transactionId;
    }

    /** 设置微信支付订单号 */
    public void setTransactionId(String transactionId) {
        this.transactionId = transactionId;
    }

    /** 获取商户退款单号 */
    @JsonProperty("out_refund_no")
    @JSONField(name = "out_refund_no")
    public String getOutRefundNo() {
        return outRefundNo;
    }

    /** 设置商户退款单号 */
    public void setOutRefundNo(String outRefundNo) {
        this.outRefundNo = outRefundNo;
    }

    /** 获取合单商户Appid */
    @JsonProperty("combine_appid")
    @JSONField(name = "combine_appid")
    public String getCombineAppid() {
        return combineAppid;
    }

    /** 设置合单商户Appid */
    public void setCombineAppid(String combineAppid) {
        this.combineAppid = combineAppid;
    }

    /** 获取合单商户号 */
    @JsonProperty("combine_mchid")
    @JSONField(name = "combine_mchid")
    public String getCombineMchid() {
        return combineMchid;
    }

    /** 设置合单商户号 */
    public void setCombineMchid(String combineMchid) {
        this.combineMchid = combineMchid;
    }

    /** 获取合单商户订单号 */
    @JsonProperty("combine_out_trade_no")
    @JSONField(name = "combine_out_trade_no")
    public String getCombineOutTradeNo() {
        return combineOutTradeNo;
    }

    /** 设置合单商户订单号 */
    public void setCombineOutTradeNo(String combineOutTradeNo) {
        this.combineOutTradeNo = combineOutTradeNo;
    }

    /** 获取子单信息 */
    @JsonProperty("sub_orders")
    @JSONField(name = "sub_orders")
    public List<WxPamSubOrders> getSubOrders() {
        return subOrders;
    }

    /** 设置子单信息 */
    public void setSubOrders(List<WxPamSubOrders> subOrders) {
        this.subOrders = subOrders;
    }

    /** 获取合单支付者 */
    @JsonProperty("combine_payer_info")
    @JSONField(name = "combine_payer_info")
    public WxPamCombinePayerInfo getCombinePayerInfo() {
        return combinePayerInfo;
    }

    /** 设置合单支付者 */
    public void setCombinePayerInfo(WxPamCombinePayerInfo combinePayerInfo) {
        this.combinePayerInfo = combinePayerInfo;
    }

    /** 获取商家批次单号 */
    @JsonProperty("out_batch_no")
    @JSONField(name = "out_batch_no")
    public String getOutBatchNo() {
        return outBatchNo;
    }

    /** 设置商家批次单号 */
    public void setOutBatchNo(String outBatchNo) {
        this.outBatchNo = outBatchNo;
    }

    /** 获取批次名称 */
    @JsonProperty("batch_name")
    @JSONField(name = "batch_name")
    public String getBatchName() {
        return batchName;
    }

    /** 设置批次名称 */
    public void setBatchName(String batchName) {
        this.batchName = batchName;
    }

    /** 获取批次备注 */
    @JsonProperty("batch_remark")
    @JSONField(name = "batch_remark")
    public String getBatchRemark() {
        return batchRemark;
    }

    /** 设置批次备注 */
    public void setBatchRemark(String batchRemark) {
        this.batchRemark = batchRemark;
    }

    /** 获取转账总金额 */
    @JsonProperty("total_amount")
    @JSONField(name = "total_amount")
    public Integer getTotalAmount() {
        return totalAmount;
    }

    /** 设置转账总金额 */
    public void setTotalAmount(Integer totalAmount) {
        this.totalAmount = totalAmount;
    }

    /** 获取转账总笔数 */
    @JsonProperty("total_num")
    @JSONField(name = "total_num")
    public Integer getTotalNum() {
        return totalNum;
    }

    /** 设置转账总笔数 */
    public void setTotalNum(Integer totalNum) {
        this.totalNum = totalNum;
    }

    /** 获取退款原因 */
    public String getReason() {
        return reason;
    }

    /** 设置退款原因 */
    public void setReason(String reason) {
        this.reason = reason;
    }

    /** 获取退款资金来源 */
    @JsonProperty("funds_account")
    @JSONField(name = "funds_account")
    public String getFundsAccount() {
        return fundsAccount;
    }

    /** 设置退款资金来源 */
    public void setFundsAccount(String fundsAccount) {
        this.fundsAccount = fundsAccount;
    }

    /** 获取退款商品(指定商品退款需要传此参数,其他场景无需传递) */
    @JsonProperty("goods_detail")
    @JSONField(name = "goods_detail")
    public WxPamGoodsDetail getGoodsDetail() {
        return goodsDetail;
    }

    /** 设置退款商品(指定商品退款需要传此参数,其他场景无需传递) */
    public void setGoodsDetail(WxPamGoodsDetail goodsDetail) {
        this.goodsDetail = goodsDetail;
    }

    /** 获取转账明细列表 */
    @JsonProperty("transfer_detail_list")
    @JSONField(name = "transfer_detail_list")
    public List<WxPamTransferDetailList> getTransferDetailList() {
        return transferDetailList;
    }

    /** 设置转账明细列表 */
    public void setTransferDetailList(List<WxPamTransferDetailList> transferDetailList) {
        this.transferDetailList = transferDetailList;
    }

}